package com.fancy.projecty.B_流程实例;

import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricActivityInstanceQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;
import java.util.List;

/**
 * 启动流程实例，添加进businessKey
 * <p>
 * 本质：act_ru_execution表中的businessKey的字段要存入业务标识
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class H_启动流程实例_添加进businessKey {


	@Autowired
	/*执行管理、包括启动、推进、删除流程实例等操作*/
	private RuntimeService runtimeService;
	@Autowired
	/*任务管理,可以做任务的查询的*/
	private TaskService taskService;
	/*历史记录的查询*/
	@Autowired
	private HistoryService historyService;

	@Autowired
	/*管理流程定义,部署相关的Service*/
	private RepositoryService repositoryService;


	@Test
	public void c_启动流程实例_添加进businessKey() {
			/*3.启动流程实例,同时还要指定业务标识businessKey  它本身就是请假单的id
		第一个参数：是指流程定义key
		第二个参数：业务标识businessKey(这个对于我们而言就是我们的业务的主键,比如请假流程,
		 这个就是请假单的那条记录的id) ,这里假设 请假单的id就是1001*/
		String writtenRequestForLeaveId = "1001"; // 请假条id
		ProcessInstance holiday = this.runtimeService.startProcessInstanceByKey("holiday", writtenRequestForLeaveId);
		/**/

		String id = holiday.getId();
		System.err.println("-------------");
		System.out.println(id);  //获取执行的唯一标示 5001
		/*4.输出processInstance相关的属性,取出businessKey使用:processInstance.getBusinessKey()
			将来如果希望通过程序拿回来这个值的话,就调用processInstance.getBusinessKey() 方法
			就可以将业务主键重新拿回来了.

			假如说这个流程实例,比如说已经执行到领导审批了,领导审批到底审批的是具体的哪一个员工的请假单
			这个时候就可以通过businessKey去查询请假单表才能知道是哪个员工的请假单了
		 */
		System.out.println(holiday.getBusinessKey());  //1001
	}


}
